package model.comunication;

import java.util.ArrayList;
import java.util.List;

import model.Sala;
import model.dba.SalaDAO;

public class ISala {

	private SalaDAO salaDAO;
	private static ISala salaInterface;

	private ISala() {
		salaDAO = SalaDAO.getInstance();
	}

	public static ISala getInstance() {
		if (salaInterface == null) {
			salaInterface = new ISala();
		}
		return salaInterface;
	}

	/**
	 * Crea el objeto
	 * 
	 * @param id
	 * @param nombre
	 * @return
	 */
	public Sala getSala(Integer id, String nombre) {
		return new Sala(id, nombre);
	}

	/**
	 * Crea el objeto
	 * 
	 * @param nombre
	 * @return
	 */
	public Sala getSala(String nombre, int capacidad, int cantDePc, String descripcion) {
		return new Sala(nombre,capacidad,cantDePc,descripcion);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	// TODO areglar para busacar para que te de un objeto
	// public List<Sala> findSala(String nombre) {
	// return this.salaDAO.find(nombre);
	// }

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	// En un futuro se puede poner nombre(primero agragar a la DAO
	// public Sala findSala(String nombre) {
	// return this.salaDAO.find(nombre);
	// }

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	public Sala getSala(Integer id) {
		return this.salaDAO.get(id);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @return
	 */
	public List<Sala> getAllSalas() {
		return this.salaDAO.getAll();
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param ids
	 * @return
	 */
	public List<Sala> getSelectedSalas(Integer... ids) {// VER por exception
		List<Sala> idList = new ArrayList<Sala>();

		for (Integer id : ids) {
			idList.add(this.salaDAO.get(id));
		}
		return idList;
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param Sala
	 * @return
	 */
	public Integer addSala(Sala sala) {
		return this.salaDAO.add(sala);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	public boolean deleteSala(Integer id) {
		return this.salaDAO.delete(id);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param Sala
	 * @return
	 */
	// En un futuro se puede poner nombre(primero agragar a la DAO
	// public boolean updateSala(Sala sala) {
	// return this.salaDAO.update(sala);
	// }

}
